A virtual machine (VM) is a software abstraction—a “virtualization”—of an actual physical computer system. As such, each VM will typically include a virtual CPU, a virtual mass storage disk, a virtual system memory, a virtual operating system (which may simply be a copy of a conventional operating system), and various virtual devices such as a network connector, in which case the virtual operating system will include corresponding drivers. All of the components of the VM may be implemented in software using known techniques to emulate the corresponding components of an actual computer.
If the VM is properly designed, then it will not be apparent to the user that any applications running within the VM are running indirectly, that is, via the virtual operating system and virtual processor. Applications running within the VM will act just as if they would if run on a “real” computer. Executable files will be accessed by the virtual operating system from the virtual disk or virtual memory, which will be simply portions of the actual physical disk or memory allocated to that VM. Once an application is installed within the VM, the operating system running inside the VM, referred to as a “guest operating system” (or “GOS”) retrieves files from the virtual disk just as if they had been pre-stored as the result of a conventional installation of the application. The design and operation of virtual machines is well known in the field of computer science.
Some interface is usually required between a VM and some underlying host operating system and hardware (in particular, the CPU), which are responsible for actually executing VM-issued instructions and transferring data to and from the actual memory and storage devices. A common term for this interface is a “virtual machine monitor” (VMM). A VMM is usually a thin piece of software that runs directly on top of a host, or directly on the hardware, and virtualizes all, or at least some of, the resources of the machine. The interface exported to the VM is then the same as the hardware interface of the machine, or at least of some machine, so that the virtual OS cannot determine the presence of the VMM. The VMM also usually tracks and either forwards (to some form of operating system) or itself schedules and handles all requests by its VM for machine resources, as well as various faults and interrupts.
In some conventional systems, the VMM runs directly on the underlying hardware, and will thus act as the “host” operating system for its associated VM. In other prior art systems, the host operating system is interposed as a software layer between the VMM and the hardware. The implementation and general features of a VMM are known in the art.
One difficulty inherent in the nature of virtualization is that it complicates the need for management and governing of CPU, memory, and I/O resources. Not only are the VM and the VMM in themselves software components that require disk space and CPU time, but each VM acts as a “computer” in its own right, and thus duplicates the demand for resources made by the “host” system in which it is loaded. The demand for adequate resource may particular be felt in the network stack, the set of components in a virtualized computing system responsible for handling the transmission and receipt of network packets between VMs and the network. While conventional system may handle a wide variety of use cases of network load, there are challenges in configuring a system for performance when a virtualized computing system is densely virtualized (i.e., having many virtual machines on fewer physical computing resources)